package com.zzb.collection;

import java.util.*;

public class MyList {
    public static void main(String[] args) {
        //创建实例
        Collection<String> collection = new ArrayList<>();

        //add   添加
        collection.add("aaaa");
        collection.add("bbbb");
        collection.add("cccc");

        //contains    查询元素是否存在
        System.out.println(collection.contains("aaaa"));
        System.out.println(collection.contains("aa"));

        //size  集合长度
        System.out.println(collection.size());

        //remove   删除元素
        System.out.println(collection.remove("aaaa"));
        System.out.println(collection.remove("aa"));

        System.out.println(collection);

        //增强for遍历集合
        for (String s : collection) {
            System.out.println(s);
        }
    }
}


class Test01 {
    public static void main(String[] args) {
        // 通过多态的方式创建一个List集合对象
        List<String> list = new ArrayList<String>();

        // 添加元素
        list.add("itwanxi");
        list.add("itwx");
        list.add("万息科技");
        list.add("itwanxi");

        //普通for遍历集合
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

        System.out.println("-----------------------");

        //增强for遍历集合
        for (String s : list) {
            System.out.println(s);
        }

        System.out.println("-------------------------");

        //迭代器遍历集合
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            System.out.println(it.next());
        }
    }
}

class Test02 {

    public static void main(String[] args) {
        Collection<String> list = new ArrayList<>();
        list.add("JavaEE企业级开发指南");
        list.add("Oracle高级编程");
        list.add("MySQL从入门到精通");
        list.add("Java架构师之路");

        mod1(list);
        mod2(list);
        mod3(list);
        mod4(list);
    }

    private static void mod4(Collection<String> list) {
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            if (s.contains("Oracle")) {
                it.remove();
            }
        }
        System.out.println(list);
    }

    private static void mod3(Collection<String> list) {
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            if (s.contains("Java")) {
                System.out.println(s);
            }
        }
    }

    private static void mod2(Collection<String> list) {
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            if (s.length() < 10) {
                System.out.println(s);
            }
        }
    }

    private static void mod1(Collection<String> list) {
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String s = it.next();
            System.out.println(s);
        }
    }

}


class Test03 {
    public static void main(String[] args) {

        /**
         * 要求:
         * 请编程实现以下功能：
         * 使用增强for遍历所有元素，并打印
         * 使用增强for遍历所有元素，打印不及格的分数；
         * 使用增强for遍历所有元素，计算不及格的分数的数量，和平均分，并打印计算结果。
         * 使用增强for遍历所有元素，求出最高分，并打印；
         */
        //创建集合对象
        Collection<Double> list = new ArrayList<>();

        //添加数据   88.5,39.2,77.1,56.8,89.0,99.0,59.5
        list.add(88.5);
        list.add(39.2);
        list.add(77.1);
        list.add(56.8);
        list.add(89.0);
        list.add(99.0);
        list.add(59.5);


        //遍历所有元素，并打印
        Traverse01(list);
        //打印不及格的分数
        Traverse02(list);
        //计算不及格的分数的数量，和平均分，并打印计算结果
        Traverse03(list);
        //求出最高分，并打印
        Traverse04(list);
    }

    private static void Traverse01(Collection<Double> list) {//使用增强for遍历所有元素，并打印
        System.out.println("使用增强for遍历所有元素，并打印如下:");
        for (Double d : list) {
            System.out.println(d);
        }
    }

    private static void Traverse02(Collection<Double> list) {//使用增强for遍历所有元素，打印不及格的分数；
        System.out.println("使用增强for遍历所有元素,打印不及格的分数如下:");
        for (Double d : list) {
            if (d < 60.0) {
                System.out.println(d);
            }
        }
    }

    private static void Traverse03(Collection<Double> list) {//使用增强for遍历所有元素，计算不及格的分数的数量，和平均分，并打印计算结果。
        int i = 0;
        double sum = 0.0;
        for (Double d : list) {
            if (d < 60.0) {
                i++;
                sum += d;
            }
        }
        System.out.println("不及格人数：" + i + ",不及格平均分数：" + (sum / i));
    }

    private static void Traverse04(Collection<Double> list) {//使用增强for遍历所有元素，求出最高分，并打印

        Double max = 0.0;
        for (Double d : list) {
            if (d > max) {
                max = d;
            }
        }
        System.out.println("集合中的最大值是：" + max);
    }


}

class Test04 {
    public static void main(String[] args) {

        /**
         * 请定义方法找出集合中所有姓张的人并且年龄大于18岁的并全部返回,然后在main方法中输出返回的人;
         * 集合原始数据有: 张三,22   李四,26    张翠山,38    赵六,19    张三丰,103    张无忌,17    赵敏,16
         * 要求:
         * 集合中的人需要以对象的形式存在,人只要有姓名和年龄两个成员变量即可;
         * 注意:仔细思考一下自定义的方法要不要设计参数和返回值;
         */

        //创建集合对象
        ArrayList<Person> list = new ArrayList<>();

        //添加数据
        list.add(new Person("张三", 22));
        list.add(new Person("李四", 26));
        list.add(new Person("张翠山", 38));
        list.add(new Person("赵六", 19));
        list.add(new Person("张三丰", 107));
        list.add(new Person("张无忌", 17));
        list.add(new Person("赵敏", 16));

        ArrayList<Person> list2 = screening(list);
        System.out.println(list2);


    }

    private static ArrayList<Person> screening(ArrayList<Person> list) {
        ArrayList<Person> list2 = new ArrayList<>();

        for (Person person : list) {
            if (person.getAge() > 18 && person.getName().startsWith("张")) {
                list2.add(person);
            }
        }
        return list2;
    }

}

class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}